iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
SideProject30

用 Rails 打造你的電商網站系列 第 8

Day 08 - 用分頁來整理過多的商品

  • 分享至 

  • xImage
  •  

如果我們今天有 100 個品項,同時集中在一個頁面會讓這個頁面變得又臭又長

適當的拆成分頁就蠻重要的

Rails 有很多分頁的套件,我們今天會使用 pagy 來做

為什麼選 pagy

pagy 相較其他的分頁套件的樣式豐富,功能也豐富

pagy 該怎麼使用

step 1. 安裝 pagy

gem 'pagy', '~> 6.0'

step 2. 在 application controller 導入

pagy 本身是個模組,為了使用它裡面的方法,我們必須要 include 進來

為什麼放在 application controller 呢?

有可能在其他頁面也會用到,所以我們就統一放在最上一層

# app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  include Pagy::Backend
end

step 3. 在 application helper 導入

我們必須要將頁面呈現在畫面中,也會需要用到 pagy 的 方法,所以我們一樣把他 include 到 application helper 中

# app/helpers/application_helper.rb

module ApplicationHelper
  include Pagy::Frontend
end

step 4. 在 controller 告訴 pagy 要幾個一頁

接下來我們就可以在 controller 中使用 pagy

pagy 方法後面的第一個參數是接資料,假設我們今天在飲品頁面要使用分頁,那麼參數就會是所有顯示出來的飲品資料

後面就可以針對你的需求來加其他參數

我們今天要讓他超過數量就換到下一頁,所以這邊就加上 items 並輸入幾個資料後要換頁

  def index
    @pagy, @drinks = pagy(Drink.all, items: 5)
  end

step 5. 在 view 中渲染分頁

最後我們在 view 中使用 pagy_nav 應該就會有分頁的樣子了

# app/views/drinks/index.html.erb

<%== pagy_nav(@pagy) %>

https://ithelp.ithome.com.tw/upload/images/20230923/201509472FEWBbZdpZ.png

Pagy 補充

pagy.rb

如果說今天很多頁面都會使用到 pagy ,或者有一些額外的功能需要設定,我們可以使用 pagy.rb 來做整理

# config/initializers/pagy.rb

Pagy::DEFAULT[:items] = 5

這時候就不需要在 controller 寫 items 的設定了

其他設定也是如此,詳情可參閱 pagy 的手冊

HTML 的屬性

如果我們必須要加上 HTML 的屬性,例如 data-action 、 data-remote 等等,

我們可以使用 link_extra 來設定,設定的地方很彈性,在 controller 中、view 的 pagy 方法中、 pagy.rb 中都可以做設定

我們就在 controller 中設定好了

# app/controllers/drinks_controller.rb

def index
  @pagy, @drinks = pagy(Drink.all, link_extra: 'data-remote="true"')
end

這麼一來他就會用 ajax 的方式換頁

需要注意的是, link_extra 是要加 HTML 可以使用的屬性,到時候會將這些屬性塞進 HTML 裡面

以上是簡單的 pagy 介紹


上一篇
Day 07 建立商品資料
下一篇
Day 09 你看到的刪除不是刪除
系列文
用 Rails 打造你的電商網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言